<?php

use app\modules\admin\AdminModule;
use yii\symfonymailer\Mailer;

$params = require __DIR__ . '/params.php';
$db = require __DIR__ . '/db.php';

$config = [
    // 属性用来区分其他应用的唯一标识ID。主要给程序使用。 为了方便协作，最好使用数字作为应用主体ID， 但不强制要求为数字
    'id' => 'basic',
    // 该属性指定你可能想展示给终端用户的应用名称， 不同于需要唯一性的 id 属性， 该属性可以不唯一，该属性用于显示应用的用途。如果其他地方的代码没有用到，可以不配置该属性
    'name' => '基础模版应用程序',
    //指定该应用的根目录.根目录包含应用系统所有受保护的源代码,在根目录下可以看到对应 MVC 设计模式的models， views，controllers 等子目录
    //可以使用路径或 路径别名 来在配置 basePath 属性。 两种格式所对应的目录都必须存在，否则系统会抛出一个异常。 系统会使用 realpath() 函数规范化配置的路径。
    //basePath 属性经常用于派生一些其他重要路径(如 runtime 路径),因此,系统预定义 @app 代表这个路径。派生路径可以通过这个别名组成(如@app/runtime代表runtime的路径)
    'basePath' => dirname(__DIR__),
    // 这个属性很实用,它允许你用数组指定启动阶段 bootstrapping process 需要运行的组件。 比如，如果你希望一个 模块 自定义 URL 规则， 你可以将模块ID加入到bootstrap数组中。
    // 属性中的每个组件需要指定以下一项:
    // 应用 组件 ID./ 模块 ID./类名./配置数组./创建并返回一个组件的无名称函数.
    'bootstrap' => ['log'],
    //该属性允许你用一个数组定义多个别名.数组的key为别名名称,值为对应的路径.使用这个属性来定义别名， 代替 Yii::setAlias() 方法来设置
    'aliases' => [
        '@bower' => '@vendor/bower-asset',
        '@npm' => '@vendor/npm-asset',
    ],
    //该属性指定应用展示给终端用户的语言,默认为 en 标识英文.如果需要之前其他语言可以配置该属性
    'language' => 'zh-CN',
    // 该属性指定应用代码的语言,默认为 'en-US' 标识英文(美国),如果应用不是英文请修改该属性.
    // 和`language`属性类似,配置该属性需遵循 IETF language tag.例如en代表英文,en-US 代表英文(美国)
    'sourceLanguage' => 'en-US',
    // 该属性提供一种方式修改 PHP 运行环境中的默认时区，配置该属性本质上就是调用 PHP 函数 date_default_timezone_set()
    'timeZone' => 'Asia/Shanghai',
    // 该属性指定应用的版本,默认为 '1.0',其他代码不使用的话可以不配置
    'version' => '1.0.1',
    // 该属性指定应用使用的字符集，默认值为 'UTF-8'， 绝大部分应用都在使用，除非已有的系统大量使用非unicode数据才需要更改该属性
    // 'charset' => 'utf-8',
    // 该属性指定未配置的请求的响应路由规则,路由规则可能包含模块ID,控制器ID,动作ID.例如 help,post/create,admin/post/create,如果动作ID没有指定,
    // 会使用 yii\base\Controller::$defaultAction 中指定的默认值。
    // 对于 Web applications 网页应用,默认值为`site`对应SiteController控制器.并使用默认的动作.因此你不带路由的访问应用,默认会显示app\controllers\SiteController::actionIndex()的结果。
    // 对于 console applications 控制台应用, 默认值为`help`对应 yii\console\controllers\HelpController::actionIndex().因此,如果执行的命令不带参数,默认会显示帮助信息。
    // 'defaultRoute' => 'site/index',
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '1234567890',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
            'class' => Mailer::class,
            'viewPath' => '@app/mail',
            // send all mails to a file by default.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => $db,
        /*
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
        */
    ],
    'modules' => [
        'admin' => [
            'class' => AdminModule::class,
        ],
    ],
    //该属性为一个数组,指定可以全局访问的参数,代替程序中硬编码的数字和字符,应用中的参数定义到一个单独的文件并随时可以访问是一个好习惯,例如用参数定义缩略图的长宽如下：Yii::$app->params['thumbnail.size']
    'params' => $params,
    //该属性指定渲染 视图 默认使用的布局名字， 默认值为 'main' 对应布局路径下的 main.php 文件， 如果 布局路径 和 视图路径 都是默认值， 默认布局文件可以使用路径别名 @app/views/layouts/main.php
    //如果不想设置默认布局文件，可以设置该属性为 false，这种做法比较罕见
    //'layout' => 'main',
    //该属性指定查找布局文件的路径，默认值为 视图路径 下的 layouts 子目录.如果视图路径使用默认值.默认的布局路径别名为@app/views/layouts.该属性需要配置成一个目录或 路径 别名
    //'layoutPath' => '@app/views/layouts',
    // 该属性指定临时文件如日志文件、缓存文件等保存路径， 默认值为带别名的 @app/runtime。
    // 可以配置该属性为一个目录或者路径 别名， 注意应用运行时有对该路径的写入权限， 以及终端用户不能访问该路径因为临时文件可能包含一些敏感信息。
    // 为了简化访问该路径，Yii 预定义别名 @runtime 代表该路径
    //'runtimePath' => '@app/runtime',
    // 该路径指定视图文件的根目录，默认值为带别名的 @app/views， 可以配置它为一个目录或者路径 别名.
    //'viewPath' => '@app/view',
    // 该属性指定 Composer 管理的供应商路径， 该路径包含应用使用的包括Yii框架在内的所有第三方库。 默认值为带别名的 @app/vendor 。
    //可以配置它为一个目录或者路径 别名， 当你修改时，务必修改对应的 Composer 配置。
    //为了简化访问该路径，Yii 预定义别名 @vendor 代表该路径
    //'vendorPath' => '@app/vendor',
    //该属性仅 console applications 控制台应用支持， 用来指定是否启用 Yii 中的核心命令，默认值为 true
    //'enableCoreCommands' => true,
    'on beforeRequest' => function ($event) {
//        echo '<pre>';
//        print_r($event);
//        echo '</pre>';
    },
    'on afterRequest' => function ($event) {
    },
    'on beforeAction' => function ($event) {
//        echo '<pre>';
//        print_r($event->action);
//        echo '</pre>';
    },
    'on afterAction' => function ($event) {
    },
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        // uncomment the following to add your IP if you are not connecting from localhost.
        //'allowedIPs' => ['127.0.0.1', '::1'],
    ];
    // 资源管理
    $config['components']['assetManager'] = [
        'appendTimestamp' => true // 在资源的请求后面增加时间戳为请求参数
    ];
}
return $config;
